package main

import "fmt"

/**
函数类型
	将函数作为一种类型可以用来定义变量
	局部变脸和全局变量冲突的时候，局部变量的优先级高
*/

var b int //全局变量
func main() {
	var sss int   //局部变量
	var s FunType //声明一个变量s是一个函数类型
	s = ss
	sss = s()
	fmt.Println(sss)

	/**
	当存在多个defer的时候，遵循后进先出的顺序执行
	*/
	defer aa() //将函数aa延迟执行  bb执行完成后才执行该函数，可以用于最后释放资源的操作
	ss()       //执行ss后，deger后进先出
	defer bb() //多个的时候后进先出 bb先出来
}

//另外一种定义使用函数的方式,就是函数类型
type FunType func() int

func ss() int {
	return 10
}

//函数的延迟执行
func aa() {
	fmt.Println("aa")
}
func bb() {
	fmt.Println("bb")
}
